package decorator

import (
	"encoding/json"
)

type tJsonLogger struct {
	sName string
	mLogger ILogger
}


type tJsonMsg struct {
	Time string
	Level string
	Msg string
}

func (me *tJsonMsg) String() string {
	j, e := json.MarshalIndent(me, "", "  ")
	if e != nil {
		return ""
	}
	return string(j)
}

func newJsonLogger(name string, logger ILogger) ILogger {
	return &tJsonLogger{
		name,
		logger,
	}
}

func (me *tJsonLogger) toJson(msg string, level string) string {
	j := &tJsonMsg{
		Time: nowString(),
		Level: level,
		Msg: msg,
	}
	return j.String()
}

func (me *tJsonLogger) Debug(msg string) {
	me.mLogger.Debug(me.toJson(msg, "DEBUG"))
}

func (me *tJsonLogger) Info(msg string) {
	me.mLogger.Debug(me.toJson(msg, "INFO"))
}

func (me *tJsonLogger) Warn(msg string) {
	me.mLogger.Debug(me.toJson(msg, "WARN"))
}

func (me *tJsonLogger) Error(msg string) {
	me.mLogger.Debug(me.toJson(msg, "ERROR"))
}